在程式開發中,結構用來描述一種事物的結構,在Swift中結構與類十分相似,都可以定義屬性、也可以定義方法,但不像類一樣具有繼承的屬性。
在Swift中使用struct關鍵字來定義結構體,結狗體中可以宣告變數或是常數作為結構體的屬性,也可以建立函數作為結構體的方法,結構體可以呼叫其中的屬性或是方法。
struct Car {
// 宣告三個屬性 分別為 價格 品牌 油量
var price: Int
var brand: String
var pertorl: Int
// 定義一個路線方法
mutating func drive() {
if pertorl > 0{
pertorl -= 1
print("drive 10 mile")
}
}
// 定義一個加油的方法
mutating func addPetrol() {
pertorl += 10
print("plus 10")
}
}
上面描述了汽車這樣的事務,並提供了三個屬性,兩個方法,在建立結構體後會默認生成一個構造方法,來讓開發者使用,開發者可以在構造方法中完成的對結構體的實作。
// 建立一個汽車結構體,價格、品牌、初始油量
var car = Car(price: 100000, brand: "BMW", pertorl: 10)
// 使用點語法來獲取car實例的屬性
print("\(car.brand) + \(car.price) + \(car.pertorl)")
// 模擬汽車的加油行為
for _ in 0...10 {
if car.pertorl == 0 {
car.addPetrol()
}else{
// 進行行走路線行為
car.drive()
}
}
上面透過結構體來模擬現實生活中的汽車,需要注意的是在Swift中資料型別分為值類型和引用類型,結構以及列舉都屬於值類型,只有類是引用類型,兩者最大的區別在於當進行數據傳遞時,值類型總是被複製,而引用類型不會被複製,後面會解釋這個部分,如果值類型有資料傳遞,原來的實例會被複製一份,修改的實例不會修改到原始的實例。
// 建立一個汽車結構體,價格、品牌、初始油量
var car = Car(price: 100000, brand: "BMW", pertorl: 10)
// 使用點語法來獲取car實例的屬性
print("(car.brand) + (car.price) + (car.pertorl)")
var car2 = car
car2.price = 50000
print("Price: \(car.price) Price: \(car2.price)")
// 將印出 Price: 100000 Price: 50000
接下來,是類 Class 的介紹